#!/usr/bin/env ruby
#
# Switches the development environment to use the given
# version of rails. Caches the Gemfile.locks so that
# switching it very fast.
#
require File.expand_path("../../spec/support/detect_rails_version", __FILE__)

def cmd(command)
  puts command
  exit 1 unless system command
end

version = ARGV[0]

unless version
  puts "USAGE: ./script/#{__FILE__} VERSION [OPTIONS]"
  puts
  puts "Options:"
  puts "  --clobber   Add this flag to remove the existing Gemfile.lock before running"
  exit(1)
end

def file_or_symlink?(path)
  File.exist?(path) || File.symlink?(path)
end

gem_lock_dir = ".gemfile-locks"
gem_lock_file = "#{gem_lock_dir}/Gemfile-#{version}.lock"

# Ensure our lock dir is created
cmd "mkdir #{gem_lock_dir}" unless File.exists?(gem_lock_dir)

# --clobber passed in
if File.exists?(gem_lock_file) && ARGV.include?('--clobber')
  cmd "rm #{gem_lock_file}"
end

write_rails_version(version)

# Ensure that bundler installs
ENV['RUBYOPT'] = ''

if File.exists?(gem_lock_file)
  cmd("rm Gemfile.lock") if file_or_symlink?("Gemfile.lock")
  cmd("ln -s #{gem_lock_file} Gemfile.lock")
  cmd("bundle")
else
  cmd "rm Gemfile.lock" if file_or_symlink?("Gemfile.lock")
  cmd "bundle install"
  cmd "mv Gemfile.lock #{gem_lock_file}"
  cmd("ln -s #{gem_lock_file} Gemfile.lock")
end
